/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package server.entidades;

import comum.Message;
import comum.ValidaUtil;
import server.Server;

/**
 *
 * @author root
 */
public class Interpretador {

    private User usuario;
    private Server server;

    public Interpretador(Server s, User u) {
        this.usuario = u;
        this.server = s;
    }

    public synchronized void tratarMessage(Message m) {
        String leitura = m.toString();
        if (leitura != null && (usuario.isConectado() || (leitura.toUpperCase().startsWith("NICK ") && usuario.getNickname() == null))) {
            if (leitura.toUpperCase().startsWith("QUIT ")) {
                
                server.finalizarUsuario(usuario);
            } else if (leitura.toUpperCase().startsWith("PART ")) {
                String[] split = m.toString().split(" ");
                String nomecanal = split[1];
                usuario.partChannel(nomecanal);
            } else if (m.getCommand().equals("JOIN")) {
                String[] split = m.toString().split(" ");
                String nomecanal = split[1];
                if (ValidaUtil.getInstance().validaCanal(nomecanal)) {
                    usuario.joinChannel(nomecanal);
                }
            } else if (m.getCommand().equals("PRIVMSG")) { //TODO +-
                String[] split = leitura.split(" ");
                String nomedest = split[1];
                String msg = "";
                for (int c = 2; c < split.length; c++) {
                    msg += split[c] + " ";
                }

                if (m.getTarget().isUser()) {
                    User destinatario = server.getUsuarios().getUsuarioPorNick(nomedest);
                    if (destinatario != null) {
                        Message mensagem = new Message(":" + usuario.getNickname() + "!" + usuario.getUsername() + "@" + usuario.getHost() + " PRIVMSG " + nomedest + " " + msg.trim());
                        destinatario.transmitirMensagem(mensagem);
                    }
                } else if (m.getTarget().isChannel()) {
                    Channel destinatario = server.getCanais().getCanalPorNome(nomedest);
                    if (destinatario != null) {
                        Message mensagem = new Message(":" + usuario.getNickname() + "!" + usuario.getUsername() + "@" + usuario.getHost() + " PRIVMSG " + nomedest + " " + msg.trim());
                        destinatario.transmitirMsgTodos(usuario, mensagem);
                    }
                }
            } else if (leitura.toUpperCase().startsWith("PING ")) {
                String[] split = leitura.split(" ");
                Message msg = new Message(":" + server.getServerHost() + " PONG " + server.getServerHost() + " " + split[1]);
                usuario.transmitirMensagem(msg);
            } else if (leitura.toUpperCase().startsWith("PONG ")) {
                usuario.setRespondeuPing(true);
            } else if (leitura.toUpperCase().startsWith("NICK ")) {
                String[] split = leitura.split(" ");
                String tempnick = split[1];
                if (usuario.getNickname() == null) {
                    usuario.setNickname(tempnick);
                } else {
                    usuario.atualizarNick(tempnick);
                }
            } else if (leitura.toUpperCase().startsWith("USER ")) {
                usuario.transmitirMensagem(new Message(":" + server.getServerHost() + " NOTICE * :*** Got Ident Response"));
                usuario.transmitirMensagem(new Message(":" + server.getServerHost() + " NOTICE * :*** Couldn't look up your hostname"));
                String[] split = leitura.split(":");
                usuario.setRealName(split[1]);

                split = leitura.split(" ");
                usuario.setUserName(split[1]);
                usuario.sendMotd();
            } else {
                
            }

        }
    }
}
